﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace PokerAssistant.Models
{
    public class Diiler
    {
        public List<Kaart> Kaardid { get; set; }

        public Diiler(bool teeKaardiPakk)
        {
            if (teeKaardiPakk)
                TeeKaardiPakk();
        }

        private void TeeKaardiPakk()
        {
            Kaardid = new List<Kaart>();

            for (var i = 2; i <= 14; i++)
            {
                foreach (Mast mast in Enum.GetValues(typeof (Mast)))
                {
                    Kaardid.Add(new Kaart(i, mast));
                }
            }
        }

        public void SegaKaardid()
        {
            Kaardid.Shuffle();
        }

        public Kaart AnnaJärgmineKaart()
        {
            var random = new Random();
            var randomAsukoht = random.Next(0, Kaardid.Count - 1);

            var kaart = Kaardid[randomAsukoht];

            Kaardid.Remove(kaart);

            return kaart;
        }

        public Kaart AnnaJärgmineKaart(List<string> kasutatudKaardid) {
            SegaKaardid();

            Kaardid = Kaardid.Where(x => !kasutatudKaardid.Contains(x.KaardiKood)).ToList();
            return AnnaJärgmineKaart();
        }
    }

    public static class ShuffleHelper
    {
        public static void Shuffle<T>(this IList<T> list)
        {
            Random rng = new Random();
            int n = list.Count;
            while (n > 1)
            {
                n--;
                int k = rng.Next(n + 1);
                T value = list[k];
                list[k] = list[n];
                list[n] = value;
            }
        }
    }
}